# -*- coding: utf-8 -*-
import os.path

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

# 中文字体
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']

#用来显示负号
plt.rcParams['axes.unicode_minus']=False

# CSV数据表格预处理
def dataPreProcess(fileName):

    #这个会直接默认读取到这个Excel的第一个表单，注意编码格式为GBK
    df=pd.read_csv(fileName,encoding="GBK",header= None)
    # 显示表格前五行
    print(df.head())

    # 切片，第4行到第34行，前22列
    print(df.iloc[3:35,0:22])

    baseName=os.path.basename(fileName).split('.')[0]
    outName = '../data/'+baseName+'_New.csv'

    print(outName)

    # 将切片后的数据输出到新的csv中，注意编码格式为GBK，不要原来的表头，不要原来的列索引
    df.iloc[3:35,0:22].to_csv(outName,encoding="GBK",header= None,index=False)

def dataStatistic(fileName):
    df = pd.read_csv(fileName,encoding="GBK",index_col=0)
    print(df.head())
    print(df.shape)
    # allRowMean=df.mean(axis = 1)# 计算所有行的平均值
    # print(allRowMean)

    # print(df.max(axis = 1))

    df.plot(style="-o", figsize=(12, 6))
    plt.show()


#axis：默认为 0，表示逢空值剔除整行，如果设置参数 axis＝1 表示逢空值去掉整列。
# how：默认为 'any' 如果一行（或一列）里任何一个数据有出现 NA 就去掉整行，如果设置 how='all' 一行（或列）都是 NA 才去掉这整行。
# thresh：设置需要多少非空值的数据才可以保留下来的。
# subset：设置想要检查的列。如果是多个列，可以使用列名的 list 作为参数。
# inplace：如果设置 True，将计算得到的值直接覆盖之前的值并返回 None，修改的是源数据。
# https://www.runoob.com/pandas/pandas-cleaning.html
#
def drop_null(fileName):
    df = pd.read_csv(fileName,encoding="GBK")
    print(df)
    print(df.shape)
    df.dropna(axis=1,inplace=True)
    print(df.shape)
    print(df)

def fill_null(fileName):
    df = pd.read_csv(fileName,encoding="GBK")
    print(df)
    print(df['地区'])
    df['2020年'].fillna(0,inplace=True)
    print(df)


#https://pandas.pydata.org/pandas-docs/version/0.23.4/merging.html
def merge_csv(fileName1,fileName2):
    df1 = pd.read_csv(fileName1,encoding="GBK")
    print(df1)
    df2 = pd.read_csv(fileName2,encoding="GBK")
    print(df2)

    result = pd.merge(df1,df2,how='inner',on=['地区'])
    print(result)


if __name__ == '__main__':
    # fileName = '../data/WinterWheatArea.csv'
    # dataPreProcess(fileName)
    fileName = '../data/WinterWheatArea_New.csv'
    # dataStatistic(fileName)
    # drop_null(fileName)
    # fill_null(fileName)
    fileName1 = fileName
    fileName2 = '../data/Province_Code.csv'
    merge_csv(fileName1,fileName2)

